package com.grant.code.utils;

import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
import java.util.Optional;

/**
 * 对话框工具类 - 提供各种常用对话框显示功能
 */
public class DialogUtils {

    /**
     * 显示错误对话框
     * 
     * @param title 标题
     * @param message 错误消息
     */
    public static void showError(String title, String message) {
        Platform.runLater(() -> {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle(title);
            alert.setHeaderText(null);
            alert.setContentText(message);
            alert.showAndWait();
        });
    }
    
    /**
     * 显示错误对话框（简化版）
     * 
     * @param message 错误消息
     */
    public static void showErrorDialog(String message) {
        Platform.runLater(() -> {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("错误");
            alert.setHeaderText(null);
            alert.setContentText(message);
            alert.showAndWait();
        });
    }
    
    /**
     * 显示错误对话框
     * 
     * @param title 标题
     * @param message 错误消息
     */
    public static void showErrorDialog(String title, String message) {
        showError(title, message);
    }
    
    /**
     * 显示信息对话框
     * 
     * @param title 标题
     * @param message 信息内容
     */
    public static void showInfo(String title, String message) {
        Platform.runLater(() -> {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle(title);
            alert.setHeaderText(null);
            alert.setContentText(message);
            alert.showAndWait();
        });
    }
    
    /**
     * 显示确认对话框
     * 
     * @param title 标题
     * @param message 确认信息
     * @return 用户选择确认返回true，否则返回false
     */
    public static boolean showConfirmation(String title, String message) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(message);
        
        Optional<ButtonType> result = alert.showAndWait();
        return result.isPresent() && result.get() == ButtonType.OK;
    }
    
    /**
     * 显示带有详细说明的确认对话框
     * 
     * @param title 标题
     * @param message 确认信息
     * @param details 详细说明
     * @return 用户选择确认返回true，否则返回false
     */
    public static boolean showConfirmation(String title, String message, String details) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle(title);
        alert.setHeaderText(message);
        alert.setContentText(details);
        
        Optional<ButtonType> result = alert.showAndWait();
        return result.isPresent() && result.get() == ButtonType.OK;
    }
    
    /**
     * 显示确认对话框（兼容方法）
     * 
     * @param title 标题
     * @param message 确认信息
     * @return 用户选择确认返回true，否则返回false
     */
    public static boolean showConfirmDialog(String title, String message) {
        return showConfirmation(title, message);
    }
    
    /**
     * 显示信息对话框
     * 
     * @param title 标题
     * @param content 内容
     */
    public static void showInfoDialog(String title, String content) {
        Platform.runLater(() -> {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle(title);
            alert.setHeaderText(null);
            alert.setContentText(content);
            alert.showAndWait();
        });
    }
    
    /**
     * 显示成功对话框
     * 
     * @param title 标题
     * @param content 内容
     */
    public static void showSuccessDialog(String title, String content) {
        Platform.runLater(() -> {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle(title);
            alert.setHeaderText(null);
            alert.setContentText(content);
            alert.showAndWait();
        });
    }
    
    /**
     * 显示成功对话框（带回调）
     * 
     * @param message 消息
     * @param callback 回调
     */
    public static void showSuccessDialog(String message, Runnable callback) {
        Platform.runLater(() -> {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("成功");
            alert.setHeaderText(null);
            alert.setContentText(message);
            Optional<ButtonType> result = alert.showAndWait();
            if (result.isPresent() && result.get() == ButtonType.OK && callback != null) {
                callback.run();
            }
        });
    }

    /**
     * 显示带有自定义按钮的对话框
     * 
     * @param title 标题
     * @param message 内容
     * @param buttonTypes 自定义按钮
     * @return 用户选择的按钮类型
     */
    public static Optional<ButtonType> showCustomDialog(String title, String message, ButtonType... buttonTypes) {
        Alert alert = new Alert(Alert.AlertType.NONE);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(message);
        alert.getButtonTypes().setAll(buttonTypes);
        
        return alert.showAndWait();
    }
    
    /**
     * 设置对话框的图标和样式
     * 
     * @param alert 对话框
     * @param cssPath CSS路径
     */
    public static void styleAlert(Alert alert, String cssPath) {
        Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
        stage.getScene().getStylesheets().add(cssPath);
    }
}